﻿/*
SINACOR - BMF&Bovespa
Arquivo: Negocio.cs
Criado em: 27-nov-2009 11:59:17
Arquiteto Responsável: RAMelo.7Comm
*/
using System;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.UI.Security.Services;
using System.Collections.Generic;
using Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.CoberturaTermo;
using Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Ordens.Negocio;

namespace Sinacor.UI.Bovespa.Alocacao.Communication.Translator.DataContractToModel
{

    /// <summary>
    /// Class Negocio
    /// </summary>
    public class Negocio
    {

        #region Construtores
        public Negocio() { }
        #endregion Construtores

        #region Métodos
        /// <summary>
        /// ToBolsa
        /// </summary>
        /// <param name="from"></param>
        /// <returns></returns>
        public Model.Bolsa ToBolsa(BolsaResponse from)
        {
            Model.Bolsa retorno = null;

            if (from != null)
            {
                retorno = new Model.Bolsa();
                retorno.Codigo = from.Codigo;
                retorno.Descricao = from.Descricao;
            }

            return retorno;
        }
        /// <summary>
        /// ToBolsa - List
        /// </summary>
        /// <param name="from"></param>
        /// <returns></returns>
        public ModelCollection<Model.Bolsa> ToBolsa(List<BolsaResponse> from)
        {
            ModelCollection<Model.Bolsa> retorno = null;

            if (from != null)
            {
                retorno = new ModelCollection<Model.Bolsa>();

                foreach (Bovespa.Ordens.Negocio.BolsaResponse item in from)
                {
                    retorno.Add(this.ToBolsa(item));
                }
            }

            return retorno;

        }

        public ModelCollection<Sinacor.UI.Bovespa.Alocacao.Model.Negocio> ToNegocio(List<Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.NegocioResponse> from)
        {
            ModelCollection<Sinacor.UI.Bovespa.Alocacao.Model.Negocio> retorno = new ModelCollection<Sinacor.UI.Bovespa.Alocacao.Model.Negocio>();

            if (from != null)
            {
                foreach (Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.NegocioResponse item in from)
                {
                    retorno.Add(ToNegocio(item));
                }
            }

            return retorno;
        }

        public Sinacor.UI.Bovespa.Alocacao.Model.Negocio ToNegocio(Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.NegocioResponse from)
        {
            Sinacor.UI.Bovespa.Alocacao.Model.Negocio to = new Sinacor.UI.Bovespa.Alocacao.Model.Negocio();
            to.Bolsa = from.Bolsa;
            to.Codigo = from.Codigo;

            //to.ContraParte = from.ContraParte;
            to.DataPregao = from.DataPregao;
            to.Digito = from.Digito;
            to.Liquidacao = from.Liquidacao;
            to.NaturezaOperacao = ToNaturezaOperacao(from.NaturezaOperacao);
            to.Mercado = ToMercado(from.Mercado);


            to.Numero = from.Numero;
            to.Quantidade = from.Quantidade;
            to.QuantidadeCasada = from.QuantidadeCasada;
            to.Saldo = from.Saldo;
            to.Valor = from.Valor;
            
            
            return to;
        }

        private Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado ToMercado(Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado from)
        {
            Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado to = new Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado();
            switch (from)
            {
                
                case Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.BOX:
                    to = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.BOX;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.CotasETF:
                    to = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.CotasETF;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.Estruturado:
                    to = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.Estruturado;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.ExercicioOpcaoCompra:
                    to = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.ExercicioOpcaoCompra;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.ExercicioOpcaoVenda:
                    to = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.ExercicioOpcaoVenda;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.Fracionario:
                    to = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.Fracionario;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.Futuro:
                    to = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.Futuro;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.IntegralizacaoResgateCotas:
                    to = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.IntegralizacaoResgateCotas;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.Leilao:
                    to = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.Leilao;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.LeilaoNaoCotados:
                    to = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.LeilaoNaoCotados;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.OpcaoCompra:
                    to = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.OpcaoCompra;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.OpcaoVenda:
                    to = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.OpcaoVenda;
                    break;

                
                case Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.OpcaoVendaCompra:
                    to = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.OpcaoVendaCompra;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.Termo:
                    to = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.Termo;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.VencimentoFuturo:
                    to = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.VencimentoFuturo;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.Vista:
                    to = Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.Vista;
                    break;

                default:
                    break;

            }
            return to;
        }

        private Sinacor.UI.Bovespa.Alocacao.Model.Enum.NaturezaOperacao ToNaturezaOperacao(Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.NaturezaOperacao from)
        {
            Sinacor.UI.Bovespa.Alocacao.Model.Enum.NaturezaOperacao to = Sinacor.UI.Bovespa.Alocacao.Model.Enum.NaturezaOperacao.Compra;
            switch (from)
            {
                case Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.NaturezaOperacao.Compra:
                    to = Sinacor.UI.Bovespa.Alocacao.Model.Enum.NaturezaOperacao.Compra;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.NaturezaOperacao.CompraVenda:
                    to = Sinacor.UI.Bovespa.Alocacao.Model.Enum.NaturezaOperacao.CompraVenda;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.NaturezaOperacao.Venda:
                    to = Sinacor.UI.Bovespa.Alocacao.Model.Enum.NaturezaOperacao.Venda;
                    break;

                default:
                    break;
            }
            return to;
        }
        /*
        private TipoMercado? ToMercado(Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado? from)
        {
            TipoMercado? to = null;

            switch (from)
            {
                case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.BOX:
                    to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.BOX;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.CotasETF:
                    to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.CotasETF;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.Estruturado:
                    to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.Estruturado;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.ExercicioOpcaoCompra:
                    to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.ExercicioOpcaoCompra;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.ExercicioOpcaoVenda:
                    to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.ExercicioOpcaoVenda;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.Fracionario:
                    to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.Fracionario;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.Futuro:
                    to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.Futuro;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.IntegralizacaoResgateCotas:
                    to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.IntegralizacaoResgateCotas;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.Leilao:
                    to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.Leilao;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.LeilaoNaoCotados:
                    to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.LeilaoNaoCotados;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.OpcaoCompra:
                    to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.OpcaoCompra;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.OpcaoVenda:
                    to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.OpcaoVenda;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.OpcaoVendaCompra:
                    to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.OpcaoVendaCompra;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.Termo:
                    to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.Termo;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.VencimentoFuturo:
                    to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.VencimentoFuturo;
                    break;

                case Sinacor.UI.Bovespa.Alocacao.Model.Enum.TipoMercado.Vista:
                    to = Sinacor.UI.Bovespa.Alocacao.Communication.Bovespa.Alocacao.AlocacaoDireta.TipoMercado.Vista;
                    break;

                default:
                    break;

            }
            return to;

        }
        */



        #endregion Métodos



    }

}